package com.sse.conexion;

import java.sql.Connection;
import java.sql.SQLException;

import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
import com.sse.util.LectorProperties;

/**
 * Clase que maneja la conexion a la BD.
 */
public class ConectorBD {

	/** Instancia del pool de conexiones. */
	private static final BoneCP connectionPool;

	// private Connection con;

	static {
		// Bloque de inicializacion estatica
		String driver = LectorProperties.leerPropiedad("DriverBD");
		String fuente = LectorProperties.leerPropiedad("FuenteBD");
		String usuario = LectorProperties.leerPropiedad("UsuarioBD");
		String clave = LectorProperties.leerPropiedad("PasswordBD");
		try {
			Class.forName(driver).newInstance();
		} catch (Exception e) {
			throw new Error(e.getMessage());
		}

		BoneCPConfig config = new BoneCPConfig(); // create a new configuration
													// object

		config.setJdbcUrl(fuente); // set the JDBC url
		config.setUsername(usuario); // set the username
		config.setPassword(clave); // set the password

		config.setIdleConnectionTestPeriodInSeconds(120);
		config.setIdleMaxAgeInMinutes(5);
		config.setMinConnectionsPerPartition(10);
		config.setMaxConnectionsPerPartition(50);
		config.setPartitionCount(3);
		config.setReleaseHelperThreads(3);
		config.setStatementsCacheSize(100);
		config.setAcquireIncrement(5);

		try {
			connectionPool = new BoneCP(config);
		} catch (SQLException e) {
			throw new Error("Error al inicializar la BD: " + fuente
					+ " - Usuario: " + usuario + " Ex: " + e.getMessage());
		}
	}

	/*
	 * Metodo que genera una conexion a la bd
	 */
	public static Connection getConexion() throws Exception {
		Connection c = connectionPool.getConnection();
		return c;
	}

	/**
	 * Cierra el pool de conexiones.
	 */
	public static void cerrarPool() {
		connectionPool.close();
	}

	// public Connection getCon() throws Exception {
	// if (con == null)
	// con = getConexion();
	// return con;
	// }

	// public static void main(String[] args) throws Exception {
	//
	// Connection c = ConectorBD.getConexion();
	//
	// for (int i = 0; i < 100; i++) {
	// System.out.println("Conexion obtenida: "+c.toString());
	// }
	// }

}
